// 导入布局组件，用于统一页面结构（侧边栏、顶部导航等）
import Layout from "./Layout.jsx";

// 导入各个页面组件
import Dashboard from "./Dashboard"; // 仪表盘页面
import Projects from "./Projects"; // 项目管理页面
import Towers from "./Towers.jsx"; // 项目管理页面
import TensionSections from "./TensionSections"; // 项目管理页面
import CrossingPoints from "./CrossingPoints"; // 交叉跨越点管理页面
import ConstructionSchemes from "./ConstructionSchemes"; // 施工方案管理页面
import ProjectDetail from "./ProjectDetail"; // 项目详情页面
import SchemeWizard from "./SchemeWizard"; // 方案创建向导页面
import KnowledgeBase from "./KnowledgeBase"; // 知识库页面
import SchemeAnalysis from "./SchemeAnalysis"; // 方案分析页面
import GlobalWorkPlan from "./GlobalWorkPlan"; // 全局工作计划页面
import GlobalEvents from "./GlobalEvents"; // 全局事件页面
import OperationalUnits from "./OperationalUnits"; // 作业单位管理页面
import DocumentTemplates from "./DocumentTemplates"; // 文档模板管理页面
import DocumentTemplateEditorPage from "./DocumentTemplateEditorPage"; // 文档模板编辑页面
import SystemConfig from "./SystemConfig"; // 系统配置页面
import SystemVariableConfigPage from "./SystemVariableConfigPage"; // 系统变量配置页面

// 导入路由相关组件
import {
  BrowserRouter as Router,
  Route,
  Routes,
  useLocation,
} from "react-router-dom";

// 页面映射对象，键为页面名称，值为对应的组件
const PAGES = {
  Dashboard: Dashboard,
  Projects: Projects,
  Towers: Towers,
  TensionSections: TensionSections,
  CrossingPoints: CrossingPoints,
  ConstructionSchemes: ConstructionSchemes,
  ProjectDetail: ProjectDetail,
  SchemeWizard: SchemeWizard,
  KnowledgeBase: KnowledgeBase,
  SchemeAnalysis: SchemeAnalysis,
  GlobalWorkPlan: GlobalWorkPlan,
  GlobalEvents: GlobalEvents,
  OperationalUnits: OperationalUnits,
  DocumentTemplates: DocumentTemplates,
  DocumentTemplateEditorPage: DocumentTemplateEditorPage,
  SystemConfig: SystemConfig,
  SystemVariableConfigPage: SystemVariableConfigPage,
};

/**
 * 根据URL路径获取当前页面名称
 * @param {string} url - 页面URL路径
 * @returns {string} 当前页面名称（对应PAGES对象的键）
 */
function _getCurrentPage(url) {
  // 处理URL末尾的斜杠
  if (url.endsWith("/")) {
    url = url.slice(0, -1);
  }
  // 提取URL最后一部分（忽略查询参数）
  let urlLastPart = url.split("/").pop();
  if (urlLastPart.includes("?")) {
    urlLastPart = urlLastPart.split("?")[0];
  }

  // 匹配对应的页面名称（不区分大小写）
  const pageName = Object.keys(PAGES).find(
    (page) => page.toLowerCase() === urlLastPart.toLowerCase()
  );
  // 未匹配到则返回第一个页面
  return pageName || Object.keys(PAGES)[0];
}

// 路由内容包装组件（用于在Router上下文内使用useLocation）
function PagesContent() {
  const location = useLocation(); // 获取当前路由信息
  const currentPage = _getCurrentPage(location.pathname); // 计算当前页面名称

  return (
    // 传入当前页面名称给Layout，用于高亮侧边栏等导航元素
    <Layout currentPageName={currentPage}>
      <Routes>
        {/* 路由配置：路径与对应页面组件的映射 */}
        <Route path="/" element={<Dashboard />} /> {/* 根路径默认显示仪表盘 */}
        <Route path="/Dashboard" element={<Dashboard />} />
        <Route path="/Projects" element={<Projects />} />
        <Route path="/Towers" element={<Towers />} />
        <Route path="/TensionSections" element={<TensionSections />} />
        <Route path="/CrossingPoints" element={<CrossingPoints />} />
        <Route path="/ConstructionSchemes" element={<ConstructionSchemes />} />
        <Route path="/ProjectDetail" element={<ProjectDetail />} />
        <Route path="/SchemeWizard" element={<SchemeWizard />} />
        <Route path="/KnowledgeBase" element={<KnowledgeBase />} />
        <Route path="/SchemeAnalysis" element={<SchemeAnalysis />} />
        <Route path="/GlobalWorkPlan" element={<GlobalWorkPlan />} />
        <Route path="/GlobalEvents" element={<GlobalEvents />} />
        <Route path="/OperationalUnits" element={<OperationalUnits />} />
        <Route path="/DocumentTemplates" element={<DocumentTemplates />} />
        <Route
          path="/DocumentTemplateEditorPage"
          element={<DocumentTemplateEditorPage />}
        />
        <Route path="/SystemConfig" element={<SystemConfig />} />
        <Route
          path="/SystemVariableConfigPage"
          element={<SystemVariableConfigPage />}
        />
      </Routes>
    </Layout>
  );
}

// 根路由组件，提供路由上下文
export default function Pages() {
  return (
    <Router>
      <PagesContent />
    </Router>
  );
}
